<!DOCTYPE html>
<html>

<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>整数反转</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <style>
        .box {
            display: flex;
            padding: 5%;
        }

        .left-wrap {
            width: 40%;
        }

        pre {
            text-align: left;
            margin-left: -20%;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="left-wrap">

        </div>
    </div>
</body>
<script>
    /*
    给定 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

    说明：你不能倾斜容器，且 n 的值至少为 2。



    图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。

     

    示例:

    输入: [1,8,6,2,5,4,8,3,7]
    输出: 49

    */
    /**
    * @param {number[]} height
    * @return {number}
    */
    var maxArea1 = function (height) {
        let maxVal = 0;
        const length = height.length
        for (let i = 0; i < length; i++) {
            for (let j = length - 1; j > 0; j--) {
                console.log(i, j)
                maxVal = Math.max(maxVal, (j - i) * (Math.min(height[i], height[j])))
                console.log(height[i], height[j], maxVal, (height[j] - height[i]), (Math.min(height[i], height[j])), (height[j] - height[i]) * (Math.min(height[i], height[j])))
            }
        }
        return maxVal
    };
    // 双指针解法
    var maxArea = function (height) {
        let i = 0, // 左边界
            j = height.length - 1, // 右边界
            res = 0, // 最大值
            lastHeight = 0; // 存放上一次的高度
        while (i < j) {
            if (height[i] < height[j]) { // 以左边界为高
                if (height[i] > lastHeight) { // 只考虑移动后高度增加的情况（移动后宽度肯定变小，若高度也变小，则面积是一定小于之前的）
                    res = Math.max(res, (j - i) * height[i]); // 将最大值赋值给res
                    lastHeight = height[i]; // 将高度赋值给lastHeight
                }
                i++;
            } else { // 以右边界为高
                if (height[j] > lastHeight) {
                    res = Math.max(res, (j - i) * height[j]);
                    lastHeight = height[j];
                }
                j--;
            }
        }
        return res;
    };
    let arr = [1, 8, 6, 2, 5, 4, 8, 3, 7]
    arr = [2, 3, 4, 5, 18, 17, 6]
    console.log(maxArea(arr))
</script>

</html>